When a storage controller issues a write instruction (also referred to as a program instruction) to solid state storage (e.g., NAND Flash), the solid state storage is sometimes unable to successfully commit the write data. This is referred to as a failure to program or a program failure. Although a straightforward solution is for the storage controller to save write data until that write data has been successfully committed to solid state storage, this is an unattractive solution because of the amount of storage required. For example, although it only takes on the order of hundreds of microseconds for the storage controller to send the write instruction to the solid state storage, it actually takes on the order of milliseconds for the solid state storage to perform the write (successfully or not). Meanwhile, a host may be transferring 500 Mbs of write data to the storage controller. The bottleneck is therefore at the solid state storage. Storing all of the write data would require the storage controller to save large amounts of information. When solid state storage systems (e.g., which include the storage controller and solid state storage) are used in low cost systems, the higher cost associated with larger amounts of DRAM or SRAM to store write data is unattractive. New techniques to recover from program failure which require less storage would be desirable.